#!/bin/bash

# 3x-ui Linux构建脚本 (macOS交叉编译版本)
# 专门解决在macOS上交叉编译Linux程序时的系统调用兼容性问题

set -e

# 默认平台为amd64
PLATFORM=${1:-amd64}

echo "开始构建 3x-ui Linux-${PLATFORM} 版本 (macOS交叉编译)..."

# 检查必要的工具
if ! command -v go &> /dev/null; then
    echo "错误: 未找到Go编译器，请先安装Go"
    exit 1
fi

if ! command -v wget &> /dev/null; then
    echo "错误: 未找到wget，请先安装: brew install wget"
    exit 1
fi

if ! command -v unzip &> /dev/null; then
    echo "错误: 未找到unzip"
    exit 1
fi

# 设置构建环境
export CGO_ENABLED=0  # 禁用CGO以避免系统调用兼容性问题
export GOOS=linux

# 根据平台设置相应的环境变量
case $PLATFORM in
    "amd64")
        export GOARCH=amd64
        XRAY_FILE="Xray-linux-64.zip"
        ;;
    "arm64")
        export GOARCH=arm64
        XRAY_FILE="Xray-linux-arm64-v8a.zip"
        ;;
    "armv7")
        export GOARCH=arm
        export GOARM=7
        XRAY_FILE="Xray-linux-arm32-v7a.zip"
        ;;
    "armv6")
        export GOARCH=arm
        export GOARM=6
        XRAY_FILE="Xray-linux-arm32-v6.zip"
        ;;
    "386")
        export GOARCH=386
        XRAY_FILE="Xray-linux-32.zip"
        ;;
    "armv5")
        export GOARCH=arm
        export GOARM=5
        XRAY_FILE="Xray-linux-arm32-v5.zip"
        ;;
    "s390x")
        export GOARCH=s390x
        XRAY_FILE="Xray-linux-s390x.zip"
        ;;
    *)
        echo "不支持的平台: $PLATFORM"
        echo "支持的平台: amd64, arm64, armv7, armv6, 386, armv5, s390x"
        exit 1
        ;;
esac

echo "构建平台: ${GOOS}-${GOARCH}"
echo "CGO状态: ${CGO_ENABLED}"

# 构建主程序
echo "正在构建主程序..."

# 使用纯Go构建，避免CGO相关的系统调用问题
# 添加netgo标签确保使用纯Go网络实现
go build -ldflags "-w -s -extldflags '-static'" -tags "netgo osusergo" -o xui-release -v main.go

if [ $? -ne 0 ]; then
    echo "构建失败，尝试使用更宽松的构建选项..."
    go build -ldflags "-w -s" -tags "netgo" -o xui-release -v main.go
    if [ $? -ne 0 ]; then
        echo "构建仍然失败，请检查Go环境和依赖"
        exit 1
    fi
fi

echo "主程序构建成功"

# 创建发布目录
echo "创建发布目录..."
rm -rf x-ui
mkdir -p x-ui/bin

# 复制文件
cp xui-release x-ui/x-ui
cp x-ui.service x-ui/
cp x-ui.sh x-ui/
chmod +x x-ui/x-ui x-ui/x-ui.sh

# 下载Xray核心和地理位置数据
echo "下载Xray核心和地理位置数据..."
cd x-ui/bin

# 下载Xray核心
XRAY_URL="https://github.com/XTLS/Xray-core/releases/download/v25.7.26/"
echo "下载 ${XRAY_FILE}..."
if ! wget -q --timeout=30 --tries=3 ${XRAY_URL}${XRAY_FILE}; then
    echo "警告: Xray核心下载失败，请手动下载"
else
    unzip -q ${XRAY_FILE}
    rm -f ${XRAY_FILE}
    # 重命名xray可执行文件
    if [ -f xray ]; then
        mv xray xray-linux-${PLATFORM}
        echo "Xray核心下载成功"
    fi
fi

# 下载地理位置数据文件
echo "下载地理位置数据文件..."
rm -f geoip.dat geosite.dat

# 下载基础地理位置数据
if wget -q --timeout=30 --tries=3 https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat; then
    echo "geoip.dat 下载成功"
else
    echo "警告: geoip.dat 下载失败"
fi

if wget -q --timeout=30 --tries=3 https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat; then
    echo "geosite.dat 下载成功"
else
    echo "警告: geosite.dat 下载失败"
fi

# 下载区域特定的地理位置数据
echo "下载区域特定地理位置数据..."
wget -q --timeout=30 --tries=3 -O geoip_IR.dat https://github.com/chocolate4u/Iran-v2ray-rules/releases/latest/download/geoip.dat || echo "警告: geoip_IR.dat 下载失败"
wget -q --timeout=30 --tries=3 -O geosite_IR.dat https://github.com/chocolate4u/Iran-v2ray-rules/releases/latest/download/geosite.dat || echo "警告: geosite_IR.dat 下载失败"
wget -q --timeout=30 --tries=3 -O geoip_RU.dat https://github.com/runetfreedom/russia-v2ray-rules-dat/releases/latest/download/geoip.dat || echo "警告: geoip_RU.dat 下载失败"
wget -q --timeout=30 --tries=3 -O geosite_RU.dat https://github.com/runetfreedom/russia-v2ray-rules-dat/releases/latest/download/geosite.dat || echo "警告: geosite_RU.dat 下载失败"

cd ../..

# 打包
echo "打包文件..."
tar -zcvf x-ui-linux-${PLATFORM}.tar.gz x-ui

echo ""
echo "========================================="
echo "构建完成！"
echo "========================================="
echo "输出文件: x-ui-linux-${PLATFORM}.tar.gz"
echo "文件大小: $(du -h x-ui-linux-${PLATFORM}.tar.gz | cut -f1)"
echo ""
echo "部署说明:"
echo "1. 上传到Linux服务器: scp x-ui-linux-${PLATFORM}.tar.gz user@server:/tmp/"
echo "2. 在服务器上解压: tar -zxvf x-ui-linux-${PLATFORM}.tar.gz"
echo "3. 进入目录: cd x-ui"
echo "4. 运行安装脚本: sudo bash x-ui.sh"
echo "   或者直接运行: sudo ./x-ui"
echo ""
echo "注意事项:"
echo "- 本版本使用纯Go编译，禁用了CGO以避免系统调用兼容性问题"
echo "- 如果某些功能需要CGO支持，请在Linux环境下重新编译"
echo "- 建议在目标Linux系统上测试运行"

# 清理临时文件
rm -f xui-release

echo ""
echo "构建脚本执行完成！"

